// 组合函数 调试方法
// NEVER GIVE UP --> never-give-up
// 将字符串先转化为数组，然后对每个数组的元素转为为小写字符串， 最有再将数组用 “-”转化为字符串

const _ = require('lodash')

// 对组合函数增加打印日志， 组合函数在执行完一个函数后，会将执行结果返回给下一个函数
const log = (v)=>{
    console.log(v)
    return v
}
// 多个跟踪函数，通过tag进行标记，使打印日志更加清晰
const trace = _.curry((tag,v)=>{
    console.log(tag, v)
    return v
})

// 将separator参数先存储起来，需用curry方法
// _.split(string, separator) 
const split =  _.curry((sep, str)=>_.split(str, sep))

// _.toLower(string)
// _.map(collection, iteratee) 使用map函数将数组的每个元素转化为小写后，依旧返回一个数组
// 执行split后返回的是一个数组
const map = _.curry((fun, array)=> _.map(array, fun) )

// _.join(array, separator)
const join =  _.curry((sep, arr)=> _.join(arr, sep))

// const f = _.flowRight(join('-'),log, map(_.toLower),  split(' '))
const f1 = _.flowRight(join('-'), trace('map after'), map(_.toLower), trace('split after'), split(' '))
console.log(f1('NEVER GIVE UP'))